import {
  USER_USERINFO,
  USER_ADDRESS,
  USER_TOKEN
} from '../common/constants.js'
export default {
  // 开启命名空间
  namespaced: true,

  // state 数据
  state: () => ({
    // 收货地址
    address: JSON.parse(uni.getStorageSync(USER_ADDRESS) || '{}'),
    token: uni.getStorageSync(USER_TOKEN) || '',
    // 像 userinfo 万一打错了，很难排查，一般大家喜欢抽离为具体的常量到某个文件
    userinfo: JSON.parse(uni.getStorageSync(USER_USERINFO) || '{}'),
    // 表示跳转到登录页时候的记录的信息
    redirectInfo: null
  }),

  // 方法
  mutations: {
    updateRedirectInfo(state, info) {
      state.redirectInfo = info
    },
    // 更新收货地址
    updateAddress(state, address) {
      state.address = address
      // 持久化到本地
      this.commit('m_user/saveAddressToStorage')
    },
    saveAddressToStorage(state) {
      uni.setStorageSync(USER_ADDRESS, JSON.stringify(state.address))
    },
    // 存储用户信息的
    saveUserInfo(state, userinfo) {
      state.userinfo = userinfo
      // 通过 this.commit() 方法，调用 m_user 模块下的 saveUserInfoToStorage 方法，将 userinfo 对象持久化存储到本地
      this.commit('m_user/saveUserInfoToStorage')
    },

    // 将 userinfo 持久化存储到本地
    saveUserInfoToStorage(state) {
      uni.setStorageSync(USER_USERINFO, JSON.stringify(state.userinfo))
    },
    // 存储 token 并持久化到本地
    updateToken(state, token) {
      state.token = token
      // 通过 this.commit() 方法，调用 m_user 模块下的 saveTokenToStorage 方法，将 token 字符串持久化存储到本地
      this.commit('m_user/saveTokenToStorage')
    },
    // 将 token 字符串持久化存储到本地
    saveTokenToStorage(state) {
      uni.setStorageSync(USER_TOKEN, state.token)
    }
  },

  // 数据包装器
  getters: {
    addstr(state) {
      // 完整信息
      if (JSON.stringify(state.address) === '{}') return ''
      // 拼接 省，市，区，详细地址 的字符串并返回给用户
      return state.address.provinceName + state.address.cityName + state.address.countyName + state.address.detailInfo
    }
  },
}
